/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.cultuurschuur.services;

import be.cultuurschuur.entity.*;
import be.cultuurschuur.interfaces.*;
import java.util.*;
import javax.persistence.*;



/**
 *
 * @author Jolien
 */
public class BLKlant implements KlantInterface
{
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("cultuurschuurPU");
    EntityManager em = emf.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    
    private String achternaam;
    private String voornaam;
    private String email;
    private String paswoord;
    private String straat;
    private Gemeente gemeente;

    public String getPaswoord() {
        return paswoord;
    }

    public void setPaswoord(String paswoord) {
        this.paswoord = paswoord;
    }
    
    public String getAchternaam() {
        return achternaam;
    }

    public void setAchternaam(String achternaam) {
        this.achternaam = achternaam;
    }

    public String getVoornaam() {
        return voornaam;
    }

    public void setVoornaam(String voornaam) {
        this.voornaam = voornaam;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getStraat() {
        return straat;
    }

    public void setStraat(String straat) {
        this.straat = straat;
    }

    public Gemeente getGemeente() {
        return gemeente;
    }

    public void setGemeente(int gemeenteID)
    {
        BLGemeente blGemeente = new BLGemeente();
        this.gemeente = blGemeente.getGemeenteById(gemeenteID);
    }

    @Override
    public Klant insertKlant()
    {  
        try
        {
            Query q = em.createNamedQuery("Klant.getByEmail");
            q.setParameter("mail", email);
            Klant klant = (Klant) q.getSingleResult();

            return null;
        }
        catch (Exception exc1)
        {
            try
            {
                tx.begin();
                Klant klant = new Klant();
                klant.setAchternaam(achternaam);
                klant.setEmail(email);
                klant.setPaswoord(paswoord);
                klant.setGemeente(gemeente);
                klant.setStraat(straat);
                klant.setVoornaam(voornaam);

                em.persist(klant);
                tx.commit();
                
                return klant;
            }
            catch (Exception exc2)
            {
                return null;
            }
        }
    }
    
    @Override
    public List<Klant> getKlanten()
    {
        return em.createNamedQuery("Klant.getAll").getResultList();
    }
    @Override
    public Klant getKlantById(int id)
    {
        Query q = em.createNamedQuery("Klant.getById");
        q.setParameter(1, id);
        Klant klant = (Klant)q.getSingleResult();
        return klant;
    }
    public Klant getKlantByEmailAndPas(String email, String pas)
    {
        try {
            Query q = em.createNamedQuery("Klant.getByEmailAndPaswoord");
            q.setParameter("mail", email);
            q.setParameter("paswoord", pas);
            Klant klant = (Klant)q.getSingleResult();
            return klant;
        } catch (Exception exc) {
            return null;
        }
    }
    @Override
    public Klant updateKlant(Klant klant)
    {
        tx.begin();

        Klant k = em.find(Klant.class, klant.getId());
        k.setAchternaam(klant.getAchternaam());
        k.setEmail(klant.getEmail());
        k.setGemeente(klant.getGemeente());
        k.setStraat(klant.getStraat());
        k.setVoornaam(klant.getVoornaam());
        
        em.persist(k);

        tx.commit();
        return k;
    }
    @Override
    public boolean deleteKlant(int id)
    {
        try {
            tx.begin();

            Klant k = em.find(Klant.class, id);
            em.remove(k);
            tx.commit();
            return true;
        } catch (Exception exc) {
            return false;
        }
    }
}
